package com.xframe.xdal.core.model.mapping;

import java.util.List;

/**
 * 功能描述:表结构对象接口
 *
 * @author xufeng
 * @version 1.0
 * @date 2022-09-26
 */
public interface ITableInfo {



    /**
     * 获取表名称
     *
     * @return
     */
    String getName();

    /**
     * 获取表编码
     *
     * @return
     */
    String getCode();

    /**
     * 获取表别名
     *
     * @return
     */
    String getAsName();

    /**
     * 获取表描述
     *
     * @return
     */
    String getLabel();

    /**
     * 索引名称
     *
     * @return
     */
    String getIndexName();

    /**
     * 获得默认的数据源编码
     *
     * @return
     */
    String getDataSourceDefCode();
    /**
     * 获取表列映射集合
     *
     * @return List<IColumnMapping>
     */
    List<IColumnMapping> getColumnMappingList();

    /**
     * 设置表列映射集合
     *
     * @return List<IColumnMapping>
     */
    void setColumnMappingList(List<IColumnMapping> columnMappingList);

    /**
     * 引用列的集合
     *
     * @return List<BelongsToMapping>
     */
    List<IRelation> getBelongsToMappingList();

    /**
     * 子表列的集合  暂时不使用
     *
     * @return List<HasManyMapping>
     */
    List<IRelation> getHasManyMappingList();

    /**
     * 查找一个IColumnMapping
     *
     * @param fieldName 属性名称
     * @return IColumnMapping
     */
    IColumnMapping findOneByFieldName(String fieldName);

    /**
     * 查找一个IColumnMapping
     *
     * @param name 字段名称
     * @return IColumnMapping
     */
    IColumnMapping findOneByName(String name);

    /**
     * 查找一个PK  IColumnMapping
     *
     * @return IColumnMapping
     */
    IColumnMapping findPkFirst();

    /**
     * 查找一个VER  IColumnMapping
     *
     * @return IColumnMapping
     */
    IColumnMapping findVer();

    /**
     * 获取所有数据表 不重复值列映射集合
     *
     * @return List<IColumnMapping>
     */
    List<IColumnMapping> findUniqueKeyList();

    /**
     * 获取数据表所有可以更新的列映射集合
     *
     * @return List<IColumnMapping>
     */
    List<IColumnMapping> findCanUpdateList();
}
